package py.com.alfa.escriba.web.rest.secure;

import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import py.com.alfa.escriba.exception.ServiceException;
import py.com.alfa.escriba.persistence.dto.referencia.BarrioDTO;
import py.com.alfa.escriba.persistence.dto.referencia.DepartamentoDTO;
import py.com.alfa.escriba.persistence.dto.referencia.DistritoDTO;
import py.com.alfa.escriba.persistence.dto.referencia.EmpleoDTO;
import py.com.alfa.escriba.persistence.dto.referencia.LocalidadDTO;
import py.com.alfa.escriba.persistence.dto.referencia.TabRefDTO;
import py.com.alfa.escriba.web.rest.EscribaService;
import py.com.alfa.escriba.web.rest.dto.EmpleoResponseDTO;

@Path(EscribaService.SECURE_PATH + "/referencia")
public interface ReferenciaSecureRESTService {

	@Path("/obtenerEmpleos")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	EmpleoResponseDTO obtenerEmpleos()  throws ServiceException;
	
	@Path("/crearEmpleo")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	EmpleoDTO crearEmpleo(EmpleoDTO dto)  throws ServiceException;	
	
	@Path("/moverEmpleo")
	@PUT
	void moverEmpleo(@HeaderParam("id-empleo")Long id, @HeaderParam("id-empleo-destino")Long idDestino)  throws ServiceException;
	
	@Path("/actualizarEmpleo")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	EmpleoDTO actualizarEmpleo(EmpleoDTO dto)  throws ServiceException;
	
	@Path("/eliminarEmpleo")
	@DELETE
	void eliminarEmpleo(@HeaderParam("id-empleo")Long id)  throws ServiceException;	

	@Path("/obtenerDepartamentos")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	List<DepartamentoDTO> obtenerDepartamentos()  throws ServiceException;

	@Path("/obtenerDepartamento/{idDepartamento}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	DepartamentoDTO obtenerDepartamento(@PathParam("idDepartamento")String idDepartamento)  throws ServiceException;
	
	@Path("/crearDepartamento")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	DepartamentoDTO crearDepartamento(DepartamentoDTO dto)  throws ServiceException;	
	
	@Path("/actualizarDepartamento")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	DepartamentoDTO actualizarDepartamento(DepartamentoDTO dto)  throws ServiceException;
	
	@Path("/eliminarDepartamento")
	@DELETE
	void eliminarDepartamento(@HeaderParam("id-departamento")String id)  throws ServiceException;		

	@Path("/obtenerDistritos/{idDepartamento}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	List<DistritoDTO> obtenerDistritos(@PathParam("idDepartamento")String idDepartamento)  throws ServiceException;

	@Path("/obtenerDistrito/{idDistrito}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	DistritoDTO obtenerDistrito(@PathParam("idDistrito")Long idDistrito)  throws ServiceException;
	
	@Path("/crearDistrito")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	DistritoDTO crearDistrito(DistritoDTO dto)  throws ServiceException;	
	
	@Path("/actualizarDistrito")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	DistritoDTO actualizarDistrito(DistritoDTO dto)  throws ServiceException;
	
	@Path("/eliminarDistrito")
	@DELETE
	void eliminarDistrito(@HeaderParam("id-distrito")Long id)  throws ServiceException;		

	@Path("/obtenerBarrios/{idDistrito}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	List<BarrioDTO> obtenerBarrios(@PathParam("idDistrito")Long idDistrito)  throws ServiceException;
	
	@Path("/crearBarrio")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	BarrioDTO crearBarrio(BarrioDTO dto)  throws ServiceException;	
	
	@Path("/actualizarBarrio")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	BarrioDTO actualizarBarrio(BarrioDTO dto)  throws ServiceException;
	
	@Path("/eliminarBarrio")
	@DELETE
	void eliminarBarrio(@HeaderParam("id-barrio")Long id)  throws ServiceException;		

	@Path("/obtenerLocalidad/{idDepartamento}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	LocalidadDTO obtenerLocalidad(@PathParam("idDepartamento")String idDepartamento)  throws ServiceException;

	@Path("/obtenerTablaReferencia/{tabla}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)		
	List<TabRefDTO> obtenerTablaReferencia(@PathParam("tabla")String tabla) throws ServiceException;
	
}
